package k2_oop.p6_relation.demo04;

/**
 * 设计一个词典类Dic，每个单词包括英文单词及对应的中文含义
 * 并有一个英汉翻译成员函数，通过查词典的方式将英语翻译成对应的汉语。
 * 思路： 字典项类DicItem包括EngLish(英语单词)、Chinese(对应中文含义)数据成员，
 * 字典类包括一个字典项类的列表，包含Add()(添加单词)和trans(英汉翻译)成员函数
 */
public class Dictionary {

    //创建一个长度为10的二维数组，表示此词典中最多只能存放10个单词
    String[][] words = new String[10][2];

    int wordCount = 0;

    /**
     * 添加单词
     *     1.如果现有单词个数已经为 10，不允许添加
     *     2.用参数的英文单词，与现有词典的单词进行比对，如果比对相同，做替换
     * @param english
     * @param chinese
     * @return
     */
    public String addWord(String english,String chinese){
        if(wordCount<words.length){
            //如果涉及到单词相同做替换的情况，需要用到索引位置，所以使用i的形式
            for (int i = 0; i < wordCount; i++) {
                //获取二维数组中的的i个元素，此元素是表示一个单词的数组，作为单词数组的第0个位置为英文单词，与参数做对比
                if (words[i][0].equals(english)) {
                    //英文无需改变，只覆盖中文即可
                    words[i][1] = chinese;
                    return "您要添加的单词已经存在，已经为您更新";
                }
            }
            //如果没有重复单词，正常追加到现有单词的最后即可
            words[wordCount] = new String[]{english,chinese};
            wordCount++;
            return "添加成功";
        }else{
            return "词典已经满了，无法录入！";
        }
    }

    /**
     * 翻译单词
     * @param english
     * @return
     */
    public String transform(String english){
        for (String[] word : words) {
            //表示每个单词的数组不需要遍历，因为明确知道索引位置为0的是英文单词
            if(english.equals(word[0])){
                return word[1];
            }
        }
        return "查无此单词";
    }

    public void display(){
        if(wordCount==0){
            System.out.println("词典为空");
        }

        for (int i = 0; i < wordCount ; i++) {
            System.out.println(words[i][0]+":"+words[i][1]);
        }

        System.out.println("======================================"+this.wordCount);
    }

}
